// 导入http模块
import http from "wechat-http";

// 配置基地址
http.baseURL = 'https://live-api.itheima.net'

// 添加请求拦截器
http.intercept.request = (params) => {
  // console.log(params, 111)
  // 获取token
  const token = getApp().token
  // 判断是否有token
  if (token) {
    // 给请求头添加 Authorization
    params.header = {
      Authorization: 'Bearer ' + token,
      // 重新赋值,用最新的header里的rf_token来发请求
      ...params.header
    }
  }
  return params
}

// 配置响应拦截器
http.intercept.response = async (res) => {
  // console.log(res, 222)
  // 处理业务失败的函数
  if (res.data.code === 401) {
    // 如果rf_token也过期了，就跳转回登录页
    // 判断如果访问的是/refreshToken
    if (res.con.url.includes('/refreshToken')) {
      // 提示用户
      wx.utils.toast('请重新登录')
      // 利用getCurrentPages()获取页面地址
      const currentPage = getCurrentPages()
      // console.log(currentPage)
      // 获取currentPage最后一个route地址
      const lastCurrentPage = currentPage[currentPage.length - 1].route
      // console.log(lastCurrentPage.route)
      return wx.redirectTo({
        url: '/pages/login/index?redirect=' + lastCurrentPage
      })
    }
    // token失效，重新请求refreshToken
    const app = getApp()

    // 如果 app.r_token 没有 下面的代码就不要执行了
    if (!app.rf_token) return

    const res2 = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: `Bearer ${app.rf_token}`
      }
    })
    // console.log(res2, 232323)
    // 更新token
    app.setToken(res2.data.token, res2.data.refreshToken)
    // 重新发送请求
    res.config.header = {
      Authorization: `Bearer ${wx.getStorageSync('token')}`
    }
    return http(res.config)
  } else if (res.data.code !== 10000) {
    wx.showToast({
      title: res.data.message,
      icon: 'error',
      mark: true
    })
    return Promise.reject(res)
  }
  return res.data
}

// 给wx添加全局属性
wx.http = http

// 导出
export default http